package cn.tedu.tickets;/**
 * @Author 金帮嘉诚 @Date 2021-06-23 星期三 10:51
 */
/*需求：设计多线程编程模型，4个售票窗口共计售卖100张票*/
/*本类通过继承Thread类的方式完成多线程编程案例*/

/**
 * 知识点
 */
public class TestRunnable {
    public static void main(String[] args) {
        MyThread2 my1 = new MyThread2();
        /*如果想要以多线程的方式启动实现类业务，需要借助Thread*/
        Thread t1 = new Thread(my1, "线程t1");
        Thread t2 = new Thread(my1, "线程t2");
        Thread t3 = new Thread(my1, "线程t3");
        Thread t4 = new Thread(my1, "线程t4");

        t1.start();
        t2.start();
        t3.start();
        t4.start();
    }
}

class MyThread2 implements Runnable {
    //用接口的方式，票数不用设置成静态
    int ticketNumber = 100;

    @Override
    public void run() {
        while (true) {
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //四个线程同时运行为例：
            // 四个线程同时看到最后一张票的情况下（这种情况不一定出现），票数最小会显示-2（四个线程分别显示1、0、-1、-2）
            System.out.println(Thread.currentThread().getName() + "还剩" + ticketNumber-- + "张，售出一张");
            if (ticketNumber <= 0) break;
        }
    }
}